帳戶(Account)
以太坊的帳戶有兩種不同的模式,以產生帳戶的方式來區分:
- 以私鑰(Private Key)產生的 EOA (Externally-owned account)
- 以部署合約(Deploy Contract)產生的合約帳戶(Contract account)
帳戶的共通特性
值得注意的是,不論通過何種方式產生帳戶,都具備有以下的特性:
- 具備餘額(Balance)的資訊,因此可以持有與收發 Ether。
- 具備呼叫(Call)的能力,因此可以與智能合約進行互動。
EOA (Externally-owned account)
建立一個 EOA 就像是我們去銀行開戶一樣,會建議一個個人的帳戶資訊。只要你擁有私鑰,就能控制這組帳戶。
EOA 具備以下資訊:
- 餘額(Balance):用以儲存該帳戶的 Ether 數量。
- Nonce:用以記錄該帳戶已經發出的交易(Transaction)數量
EOA 可以:
- 收發 Ether。
- 可以發起交易(Transaction),請特別注意,由於發起交易時一定需要有發送者的簽名(Signature),因此是沒辦法直接使用智能合約發起交易的,整個交易鏈的發起者必然為一個 EOA。
合約帳戶(Contract account)
建立合約需要使用 EOA 進行合約的部署。
建立時需要支付燃料,因為部署合約需要在以太坊上儲存合約的程式碼與寫入合約的儲存空間。
合約帳戶具備以下資訊:
- 餘額(Balance):用以儲存該合約持有的 Ether 數量。
- Nonce:為該帳戶建立新合約的數量。
- 合約的程式碼雜湊值(codeHash):為一組雜湊值,用以查詢資料庫中該帳戶所代表的 EVM 程式碼。
- 合約的儲存空間雜湊值(storageRoot 或者 storageHash):為一個 256 位元長度的雜湊值,代表儲存 Merkle Patricia trie 的根節點雜湊值。
合約帳戶可以:
- 收發 Ether。
- 只有被 EOA 驅動時,才能當為交易的中繼者,進行合約部署或發送交易。